package cn.bearspark.schedule.provider.dao.mapper;

import cn.bearspark.schedule.provider.dao.po.ScheduledTaskPO;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 定时任务的数据映射接口
 *
 * @author f
 */
@Mapper
public interface ScheduledTaskMapper {

    /**
     * 新增一个定时任务
     *
     * @param moduleCode 模块的枚举值
     * @param deadline   执行的时间
     * @param info       执行任务所需要的额外信息
     */
    @Insert("INSERT INTO t_scheduled_task (deadline, module_code, info) " +
            "VALUES (#{deadline}, #{moduleCode}, #{info})")
    void insert(int moduleCode, LocalDateTime deadline, String info);

    /**
     * 获取已到执行时间的定时任务
     *
     * @return 已到执行时间的定时任务的集合
     */
    @Select("SELECT task_id, module_code, info FROM t_scheduled_task WHERE deadline <= NOW()")
    List<ScheduledTaskPO> listExpired();

    /**
     * 删除已执行的定时任务
     *
     * @param executedTaskIdList 已执行的定时任务的 id 集合
     */
    void deleteExecuted(List<Long> executedTaskIdList);
}
